package logica.persistencia;
import java.util.List;


import logica.Diagrama;
import logica.Proyecto;


import xml.*;



public class ProyectoPersistente {
	private Proyecto proyecto;
				
	public ProyectoPersistente(Proyecto proyecto) {
		this.setProyecto(proyecto);
	}
	
	public ProyectoPersistente() {
		 
	}

	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}
	
	private Boolean serializarDiagramasSecundarios(Diagrama diag) {
		Boolean exito = true;
		List<Diagrama> diagramasHijos = diag.getDiagramasHijo();
		
		for (Diagrama diagrama : diagramasHijos ) {
			DiagramaSecundarioPersistente diagPS = new DiagramaSecundarioPersistente(diagrama);
			diagPS.serializar();
			exito = (exito)? XMLManager.getInstance().serializarDiagramaPersistente(diagPS): false;
			exito = serializarDiagramasSecundarios(diagrama);
		}
		return exito;
	}
	
	public Boolean serializar() {
		Boolean exito = true;
		DiagramaPrincipalPersistente diagP = this.proyecto.getDiagramaPpal().getDiagramaPersistente();
		diagP.serializar();
				
		exito = (exito)? XMLManager.getInstance().serializarDiagramaPersistente(diagP): false;
		Diagrama diag = this.proyecto.getDiagramaPpal();
		exito = serializarDiagramasSecundarios(diag);
		
		return exito;
	}

	private Boolean hidratarDiagramasSecundarios(Diagrama diag) {
		Boolean exito = true;
		List<Diagrama> diagramasHijos = diag.getDiagramasHijo();
		
		for (Diagrama diagrama : diagramasHijos ) {
			DiagramaSecundarioPersistente diagPS = new DiagramaSecundarioPersistente(diagrama);
			exito = (exito)? XMLManager.getInstance().hidratarDiagramaPersistente(diagPS): false;
			if (exito)
				diagPS.hidratar();
			exito = hidratarDiagramasSecundarios(diagrama);
		}
		return exito;
	}
	
	public Boolean hidratar() {
		Boolean exito = true;
		DiagramaPrincipalPersistente diagP = proyecto.getDiagramaPpal().getDiagramaPersistente();
		exito = (exito)? XMLManager.getInstance().hidratarDiagramaPersistente(diagP): false;
		
		if (exito) {
			diagP.hidratar();
			Diagrama diag = this.proyecto.getDiagramaPpal();
			exito = hidratarDiagramasSecundarios(diag);
		}	
		

		return exito;	
	}
	

	
}
